CompletableFuture এবং Mono/Flux এর ব্যবহার

Java Technologies - স্প্রিং বুট ক্লায়েন্ট (Spring Boot Client) Synchronous এবং Asynchronous Request Handling |
204
204

স্প্রিং বুট ক্লায়েন্টে অ্যাসিনক্রোনাস প্রোগ্রামিং এবং নন-ব্লকিং কলের জন্য CompletableFuture এবং Mono/Flux অত্যন্ত গুরুত্বপূর্ণ। এই দুটি পদ্ধতি পৃথকভাবে কাজ করে, তবে উভয়ই অ্যাসিনক্রোনাস ডেটা প্রসেসিংয়ের জন্য ব্যবহৃত হয়।


১. CompletableFuture এবং এর ব্যবহার

CompletableFuture হলো Java 8-এর একটি ফিচার যা অ্যাসিনক্রোনাস টাস্ক চালানোর জন্য ব্যবহার হয়। এটি ব্লকিং নয় এবং ভবিষ্যতে একটি রেসপন্স রিটার্ন করবে।

CompletableFuture এর প্রাথমিক ব্যবহার:

import java.util.concurrent.CompletableFuture;

public CompletableFuture<String> fetchDataAsync(String url) {
    return CompletableFuture.supplyAsync(() -> {
        // এখানে HTTP কল বা অন্য কোনো অ্যাসিনক্রোনাস কাজ করুন
        return "Response from " + url;
    });
}

স্প্রিং বুটে CompletableFuture ব্যবহার:

import org.springframework.stereotype.Service;
import java.util.concurrent.CompletableFuture;

@Service
public class ApiClient {

    public CompletableFuture<String> getData(String url) {
        return CompletableFuture.supplyAsync(() -> {
            // HTTP কল (RestTemplate বা WebClient ব্যবহার করুন)
            return "Fetched Data from " + url;
        });
    }
}

CompletableFuture ব্যবহার করে কল করা:

ApiClient client = new ApiClient();
CompletableFuture<String> futureResponse = client.getData("https://api.example.com/data");

futureResponse.thenAccept(response -> {
    System.out.println("Response: " + response);
}).exceptionally(ex -> {
    System.err.println("Error occurred: " + ex.getMessage());
    return null;
});

২. Mono এবং Flux এবং এর ব্যবহার

Mono এবং Flux হলো Spring WebFlux-এর অংশ, যা রিয়াক্টিভ প্রোগ্রামিং মডেলে কাজ করে।

  • Mono: একক অবজেক্ট বা ডেটা রিটার্ন করে।
  • Flux: একাধিক ডেটার স্ট্রিম রিটার্ন করে।

Mono ব্যবহার:

import reactor.core.publisher.Mono;

public Mono<String> fetchDataMono(String url) {
    return Mono.just("Response from " + url);
}

Flux ব্যবহার:

import reactor.core.publisher.Flux;

public Flux<String> fetchDataFlux() {
    return Flux.just("Data1", "Data2", "Data3");
}

WebClient এর সাথে Mono এবং Flux ব্যবহার:

import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;

@Service
public class ApiClient {

    private final WebClient webClient;

    public ApiClient(WebClient.Builder webClientBuilder) {
        this.webClient = webClientBuilder.baseUrl("https://api.example.com").build();
    }

    public Mono<String> getData(String endpoint) {
        return this.webClient.get()
                .uri(endpoint)
                .retrieve()
                .bodyToMono(String.class);
    }

    public Flux<String> getMultipleData(String endpoint) {
        return this.webClient.get()
                .uri(endpoint)
                .retrieve()
                .bodyToFlux(String.class);
    }
}

Mono এর রেসপন্স প্রসেস করা:

ApiClient client = new ApiClient(WebClient.builder());
client.getData("/data").subscribe(response -> {
    System.out.println("Response: " + response);
}, error -> {
    System.err.println("Error: " + error.getMessage());
});

৩. CompletableFuture এবং Mono/Flux তুলনা

বৈশিষ্ট্যCompletableFutureMono/Flux
মডেলImperativeReactive
নন-ব্লকিংহ্যাঁহ্যাঁ
অ্যাপ্লিকেশন স্কোপJava স্ট্যান্ডার্ড ল্যাঙ্গুয়েজSpring WebFlux এবং Reactive
ডেটা টাইপCompletableFutureMono, Flux
ডেটা ফ্লোএকক রেসপন্সএকক বা একাধিক রেসপন্স
স্ট্রিম সাপোর্টনেইআছে (Reactive Streams)

৪. CompletableFuture এবং Mono/Flux একসাথে ব্যবহার

Spring অ্যাপ্লিকেশনে CompletableFuture থেকে Mono-তে বা Mono থেকে CompletableFuture-এ রূপান্তর করা যেতে পারে।

CompletableFuture থেকে Mono:

import reactor.core.publisher.Mono;

public Mono<String> convertToMono(CompletableFuture<String> future) {
    return Mono.fromFuture(future);
}

Mono থেকে CompletableFuture:

import reactor.core.publisher.Mono;

public CompletableFuture<String> convertToFuture(Mono<String> mono) {
    return mono.toFuture();
}

৫. Use Case: মাইক্রোসার্ভিসে অ্যাসিনক্রোনাস কমিউনিকেশন

Example: দুটি API কল নন-ব্লকিং পদ্ধতিতে করা (Mono ব্যবহার):

public Mono<String> callTwoApis() {
    Mono<String> api1Response = webClient.get().uri("/api1").retrieve().bodyToMono(String.class);
    Mono<String> api2Response = webClient.get().uri("/api2").retrieve().bodyToMono(String.class);

    return Mono.zip(api1Response, api2Response, (response1, response2) -> 
        "Combined Response: " + response1 + ", " + response2
    );
}

Example: CompletableFuture দিয়ে সমান্তরাল প্রসেসিং:

public CompletableFuture<String> callTwoApisParallel() {
    CompletableFuture<String> api1Future = CompletableFuture.supplyAsync(() -> webClient.get()
        .uri("/api1")
        .retrieve()
        .bodyToMono(String.class)
        .block());

    CompletableFuture<String> api2Future = CompletableFuture.supplyAsync(() -> webClient.get()
        .uri("/api2")
        .retrieve()
        .bodyToMono(String.class)
        .block());

    return api1Future.thenCombine(api2Future, (response1, response2) -> 
        "Combined Response: " + response1 + ", " + response2
    );
}

উপসংহার

  • Mono/Flux: যখন রিয়াক্টিভ প্রোগ্রামিং প্রয়োজন হয়, যেমন মাইক্রোসার্ভিস বা স্ট্রিম ডেটা প্রসেসিং।
  • CompletableFuture: স্ট্যান্ডার্ড Java অ্যাপ্লিকেশনে অ্যাসিনক্রোনাস কাজ পরিচালনা করতে।

স্প্রিং বুট ক্লায়েন্টে এই দুটি প্রযুক্তি ব্যবহার করে অ্যাপ্লিকেশনের স্কেল এবং কর্মক্ষমতা উল্লেখযোগ্যভাবে বৃদ্ধি করা যায়।

Content added By
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion